001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Jan 9, 2003
005 * Time: 4:10:32 PM
006 */
007 package EVolve.util.equators;
008
009 import java.util.ArrayList;
010
011
012 public class OrderedSet extends Set{
013
014 public OrderedSet() {
015
016 }
017
018 public OrderedSet(int interval) {
019 size = interval;
020 data = new long[size];
021 emptySlot = 0;
022 entityNumber = 0;
023 for (int i=0; i<size; i++)
024 data[i] = -1;
025 }
026
027 public void addElement(long element) {
028 if (emptySlot >= size) {
029 System.out.println("Set is full, unable to add new elements!!!");
030 return;
031 }
032 data[emptySlot] = element;
033 emptySlot++;
034 }
035
036 public Set intersection(Set set) {
037 ArrayList temp= new ArrayList();
038
039 for (int i=0; i<size; i++) {
040 if ((data[i]!=-1)&&(!temp.contains(new Long(data[i])))&&(set.exist(data[i])))
041 temp.add(new Long(data[i]));
042 }
043
044 Set result = new OrderedSet(temp.size());
045 for (int i=0; i<temp.size(); i++) {
046 result.addElement(((Long)temp.get(i)).intValue());
047 }
048
049 return result;
050 }
051
052 public Set union(Set set) {
053 ArrayList temp= new ArrayList();
054
055 for (int i=0; i<size; i++) {
056 if (!temp.contains(new Long(data[i])))
057 temp.add(new Long(data[i]));
058 }
059
060 for (int i=0; i<set.size(); i++) {
061 long element = set.getElement(i);
062 if (!temp.contains(new Long(element)))
063 temp.add(new Long(element));
064 }
065
066 Set result = new OrderedSet(temp.size());
067 for (int i=0; i<temp.size(); i++) {
068 result.addElement(((Long)temp.get(i)).longValue());
069 }
070
071 return result;
072 }
073
074 public boolean exist(long element) {
075 for (int i=0; i<size; i++)
076 if (data[i] == element) return true;
077
078 return false;
079 }
080
081 public long getHashValue() {
082 long retVal = data[0];
083 ArrayList temp = new ArrayList();
084 temp.add(new Long(data[0]));
085 for (int i=1; i<size; i++) {
086 if (!temp.contains(new Long(data[i])))
087 retVal = retVal ^ data[i];
088 }
089 temp = null;
090
091 return retVal;
092 }
093
094 public Set newSet() {
095 return new OrderedSet(size);
096 }
097
098 public boolean equals(Set set, float percent) {
099 float counter = 0;
100 int loop = size>set.size() ? set.size() : size;
101
102 for (int i = 0; i< loop; i++) {
103 if (set.getElement(i) == data[i])
104 counter ++;
105 }
106
107 return ((200*counter/(size+set.size())) >= percent) ;
108 }
109
110 public Object clone() {
111 return super.clone();
112 }
113 }